package org.xxpay.core.service;

import org.xxpay.core.entity.MchAccount;
import org.xxpay.core.entity.MchAgentpayRecord;
import org.xxpay.core.entity.PayOrder;
import org.xxpay.core.entity.SettRecord;

import java.util.List;
import java.util.Map;

/**
 * @author: dingzhiwei
 * @date: 17/12/4
 * @description:
 */
public interface IMchAccountService {

    List<MchAccount> listAll(int offset, int limit);

    int updateSettAmount(long mchId, long totalAmount);

    MchAccount findByMchId(Long mchId);

    /**
     * 所有商户主页统计商户余额
     * @return
     */
    Map countBalance();

    /** 重置今日数据 **/
    void resetTodayAmount();


//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓更改商户账户余额（ 采用事务行锁机制 ） ↓↓↓↓↓↓↓↓

    /** 更新商户余额和safeKey, 返回数据库最新数据Record **/
    MchAccount updateBalanceAndSafeKey(MchAccount updateMchAccount);

    /** 支付业务 / 在线充值 / 线下充值(填充订单必要信息) 订单支付完成后 处理账户信息  **/
    void changeBalanceAndInsertHistory(PayOrder payOrder, boolean isOffRecharge, String remark);

    /** 代付业务 订单支付完成后 处理账户信息 **/
    void changeBalanceAndInsertHistory(MchAgentpayRecord mar, String transOrderId);

    /** 提现业务 处理完成后 处理账户信息 **/
    void changeBalanceAndInsertHistory(SettRecord settRecord);

    /**
     * 调账业务 处理账户信息； 当变更金额为0时不做任何操作;
     * @param mchId 商户ID
     * @param changeAmount 变更金额， 正数表示增加金额，负数表示减少金额
     * @param bizItem 类目
     * @param remark 备注
     */
    void changeBalanceAndInsertHistoryByPlat(Long mchId, Long changeAmount, String bizItem, String remark);

    /**
     * 更新商户不可用余额
     * @param mchId 商户ID
     * @param bizItem 用于判断更新对象是余额不可用 / 代付余额不可用
     * @param changeUnBalance 金额
     */
    void onlyChangeUnBalance(Long mchId, String bizItem, Long changeUnBalance);

    /**
     * 给商户充值指定金额到代付账户
     * @param mchId
     * @param inAmountL
     * @param remark
     */
    void recharge4Agentpay2(Long mchId, long inAmountL, String remark, String orderId);

//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑


}
